import req from '@/utils/request';

// 批量导入
const files = require.context('./modules', false, /.js$/);
const modules = files.keys().reduce((r, k) => (r[require('path').basename(k, '.js')] = files(k).default || files(k)) && r, {});

// 默认配置
const DEFAULT_METHOD = 'post'; // 默认请求方式
const DEFAULT_API_PATH = '/biz/'; // 默认接口路径

/**
 * 接口文档转接口方法
 * @param {object} list - 接口文档
 * @returns {object} result - 接口方法
 */
function docToApis (fileName, list) {
  const result = {};
  list.forEach(api => {
    const {
      name, // 接口名
      code, // 接口代号
      path, // 接口路径
      method // 请求方式
    } = api;
    result[name] = (data, settings, config) => {
      config = {
        ...config,
        headers: {
          __API_DESC__: `${fileName}.${name}`
        }
      };
      return req.invoke(
        `${path || DEFAULT_API_PATH}${code}`,
        settings,
        {
          method: method || DEFAULT_METHOD,
          data,
          ...config
        }
      );
    };
  });
  return result;
}

// modules批量调用docToApis
const apis = Object.keys(modules).reduce((r, k) => {
  r[k] = docToApis(k, modules[k]);
  return r;
}, {});

export const apiDocs = modules;

export default apis;
